/**
 *  @file
 *  @brief   操作包
 *  @author  yangtianxing
 *  @date    2024.05.16
 *  @version  v1.0
 *  @par Copyright(c):  ShenGong  Simulation corporation
 */
#pragma once
#include <vector>

#include "Utility/Algebra/Matrix.h"
#include "Utility/Algebra/Point.h"

#include "DataStructure/Common/Id.h"
#include "DataStructure/Common/Out.h"
#include "DataStructure/Common/Real.h"

#include "../Common/PublicElementExport.h"
#include "SGFem/ElementCalculator/Common/ElementCalculatorExport.h"

SG_FEMSOLVER_ELEMENT_NAMESPACE_OPEN

/**
 * @brief   : 计算单元材料铺层方向
 * @param   : mCId        材料柱坐标系
 * @param   : central     单元中心点
 * @param   : T           单元局部坐标系
 * @param   : vectorG1G2  单元边1-2方向
 * @param   : theta       铺层角度
 * @param[out]   : eleMatAxis 铺层方向
 * @return  :  是否需要对材料刚度进行旋转
 * @author  : LiXY.
 * @date    : 2024.10.26
 */
PublicElement_DECLSPEC bool calcMaterialOritation (SG::DataStructure::Common::Id                       mCId,
                                                   const SG::Algebra::Point&                           central,
                                                   const SG::Algebra::Matrix&                          T,
                                                   const std::vector<SG::DataStructure::Common::Real>& vectorG1G2,
                                                   SG::DataStructure::Common::Real                     theta,
                                                   std::vector<SG::DataStructure::Common::Real>&       eleMatAxis);
SG_FEMSOLVER_ELEMENT_NAMESPACE_CLOSE